package org.hard.model.structure.composite;

import java.util.List;

/**
 * @author: 王林博
 * @date: 2023年02月22日 17:30
 */
// 组合类表示可能包含子项目的复杂组件。组合对象通常会将实际工作委派给子项目，然后“汇总”结果。
public class CompoundGraphic implements Graphic {

    List<Graphic> graphics;

    // 组合对象可在其项目列表中添加或移除其他组件（简单的或复杂的皆可）。
    void add(Graphic graphic) {
        // 在子项目数组中添加一个子项目。
        graphics.add(graphic);
    }
    // 从子项目数组中移除一个子项目。
    void remove(Graphic graphic) {
        graphics.remove(graphic);
    }


    @Override
    public void move(Integer x, Integer y) {
        for (Graphic graphic : graphics) {
            graphic.move(x,y);
        }
    }
    // 组合会以特定的方式执行其主要逻辑。它会递归遍历所有子项目，并收集和汇总其结果。由于组合的子项目也会将调用传递给自己的子项目，以此类推，
    // 最后组合将会完成整个对象树的遍历工作。
    @Override
    public void draw() {
        System.out.println("CompoundGraphic");
    }
}
